<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
	<title>模板标签</title>
	<style type="text/css">
	
	ul {
		list-style: none;
		margin: 10px 0;
		border: 1px dotted #aaa;
	}

	li{
		widows: 300px;
		padding: 5px 0;
	}

    </style>
</head>
<body>
	<div class="container">
		<h1>模板标签</h1>
		<div id="box">
			
		</div>
	</div>
<script src="https://cdn.bootcss.com/decimal.js/10.2.0/decimal.min.js"></script>

<script src="https://cdn.staticfile.org/jquery/3.2.0/jquery.js"></script>
<script type="text/javascript">

/**
 * 格式化的日期时间字符串 【简单版本】
 */
function dateFormat1(date, format="yyyy-MM-dd HH:mm:ss") {
	let config = {
		yyyy: date.getFullYear(),
		MM: date.getMonth() + 1,
		dd: date.getDate(),
		HH: date.getHours(),
		mm: date.getMinutes(),
		ss: date.getSeconds(),
	}


	for(let p  in config) {
		format = format.replace(p, config[p])
	}
	
	return format;
}

/**
 * 格式化的日期时间字符串 正则表达式版本, 考虑了补全前导0的情况
 */
function dateFormat2(date, format="yyyy-MM-dd HH:mm:ss") {
	let config = {
		"y+": date.getFullYear(),
		"M+": date.getMonth() + 1,
		"d+": date.getDate(),
		"H+": date.getHours(),
		"m+": date.getMinutes(),
		"s+": date.getSeconds(),
	}

	// 年份因为可能有所4位 需要单独处理
	if (/(y+)/.test(format)) {
		let newVal = (date.getFullYear() + "").substr(4 - RegExp.$1.length)
        format = format.replace(RegExp.$1, newVal);
	}

	for(let p  in config) {
		if(new RegExp("(" + p + ")").test(format)) {
			let newVal = RegExp.$1.length === 1 ? 
				config[p] : ('00'+config[p]).substr((""+ config[p]).length)

			format = format.replace(RegExp.$1, newVal )
		}

	}
	
	return format;
}

/**
 * 正则改进版本
 * @param  {[type]} date [description]
 * @param  {String} fmt  [description]
 * @return {[type]}      [description]
 */
function dateFormat (date, fmt="yyyy-MM-dd HH:mm:ss") { 
     var o = { 
     	"y+": date.getFullYear(),
		"M+": date.getMonth() + 1,
		"d+": date.getDate(),
		"H+": date.getHours(),
		"m+": date.getMinutes(),
		"s+": date.getSeconds(),
		"q+" : Math.floor((date.getMonth()+3)/3), //季度 
        "S"  : date.getMilliseconds()             //毫秒 
    }; 
    if(/(y+)/.test(fmt)) {
            fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length)); 
    }
     for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
         }
     }
    return fmt; 
}        

console.log(dateFormat1(new Date))
console.log(dateFormat1(new Date, "yyyy-MMM-dd HHHH:mm:ss"))
console.log(dateFormat1(new Date, "yyy年-MM月"))

console.log('-----------------------\n')

console.log(dateFormat(new Date))
console.log(dateFormat(new Date, "yyyy-MMM-dd HHHH:mm:ss"))
console.log(dateFormat(new Date, "yyy年-MM月"))


</script>
</body>
</html>

